"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/6/3 10:47
@Description :  装饰器的使用
使用装饰器修饰含有参数的函数  装饰器应该如何定义
1. 一个
2. 多个
3.不定参
"""


def study_time(fn):
    # 装饰器内部的函数 参数列表需要参照后续修饰的目标函数确定
    def inner(course):
        print('-----------上课时间到了-----------')
        fn(course)
        print('-----------下课时间到了-----------')

    return inner


@study_time  # study = study_time(study)
def study(course):
    print('-------正在上课--------', course)


# 增加数学运算  通用的修饰器
def sum_pro(fn):
    def inner(*args):
        print('----------正在努力计算----------')
        result = fn(*args)
        # 返回目标函数的执行结果
        return result

    return inner


# 有多个参数的函数
@sum_pro
def sum_number(a, b):
    print(f'{a}+{b} = {a + b}')
    return a + b


@sum_pro
def sub_number(a, b):
    print(f'{a}-{b} = {a- b}')
    return a - b

@sum_pro  # sum_number2 = sum_pro(sum_number2)
def sum_number2(a, b, c):
    print(f'{a}+{b}+{c} = {a + b + c}')


if __name__ == '__main__':
    # study('python')
    result = sum_number(1, 2)
    print('sum_num', result)
    # sum_number2(1, 2, 3)
    result = sub_number(2,1)
    print(result)
